import request from "@/utils/request";

// 限制通过分页查询回来的SkuList列表中单个的数据的返回值
export interface SkuItemType {
    id?: number,
    spuId: number; //所在的spuId
    price: number; //当前sku的价格
    skuName: string; //当前sku的名称
    skuDesc: string; //当前sku的描述
    weight: string; //当前sku的重量
    tmId: number; //当前sku所在的品牌id
    category3Id: number; //当前sku所在的三级分类的id
    skuDefaultImg: string; //当前sku的默认的图片
    isSale: number; //当前sku是否上架
    createTime: string; //当前sku的创建时间
    skuImageList: null; //当前sku图片列表
    skuAttrValueList: null; //当前sku属性值列表
    skuSaleAttrValueList: null; //当前sku销售属性值列表
}

// 限制通过分页查询回来的SkuList列表中整体的数据的返回值
export interface SkuListType {
    records: SkuItemType[],
    total: number,
    size: number,
    current: number,
    searchCount: boolean,
    pages: number
}

// 1- 分页获取sku列表
export const reqGetSkuListAsync = (page: number, limit: number) => {
    return request.get<null, SkuListType>(`/admin/product/list/${page}/${limit}`)
}

// 2- 商品上架
export const reqGetOnSaleAsync = (skuId: number) => {
    return request.get<null, null>(`/admin/product/onSale/${skuId}`)
}

// 3- 商品下架
export const reqGetCancelSaleAsync = (skuId: number) => {
    return request.get<null, null>(`/admin/product/cancelSale/${skuId}`)
}

// 4- 删除商品
export const reqDeleteItemAsync = (skuId: number) => {
    return request.delete<null, null>(`/admin/product/deleteSku/${skuId}`)
}

// 限制sku图片的单个的详细数据
export interface skuImageItemType {
    id?: number;
    skuId?: number; //所在的skuId
    imgName: string; //图片名称
    imgUrl: string; //图片地址
    spuImgId: number; //在spu中的id
    isDefault: string; //是否是当前的默认图片
}

// 限制sku图片列表的整体数据
export type skuImageListType = skuImageItemType[]

// 限制sku单个的详细数据的属性值
export interface skuAttrValueItemType {
    id?: number;
    attrId: number; //当前平台属性值所在的平台属性在完整的平台属性列表中的id
    valueId: number; //当前平台属性值在当前属性的所有属性值中的id
    skuId?: number; //当前的skuId
    attrName?: string; //当前平台属性名
    valueName?: string; //当前的平台属性值
}

// 限制sku属性值列表的整体数据
export type skuAttrValueListType = skuAttrValueItemType[];

// 限制sku单个的详细数据的销售属性值
export interface skuSaleAttrValueItemType {
    id?: number;
    skuId?: number; //当前所在的skuId
    spuId?: number; //当前sku所在的spuId
    saleAttrValueId: number; //当前销售属性值在他的完整销售属性值列表中的id
    saleAttrId: number; //当前销售属性在完整的销售属性列表中的id
    saleAttrName?: string; //销售属性名称
    saleAttrValueName?: string; //销售属性值的名称
}

// 限制sku整体的详细数据的销售属性值列表数据
export type skuSaleAttrValueListType = skuSaleAttrValueItemType[];

// 限制通过skuId查询回来的SkuItem的详情数据 也是 限制新增的 skuInfo 的参数
export interface SkuItemDetailType {
    id?: number,
    spuId: number; //所在的spuId
    price: number; //当前sku的价格
    skuName: string; //当前sku的名称
    skuDesc: string; //当前sku的描述
    weight: string; //当前sku的重量
    tmId: number; //当前sku所在的品牌id
    category3Id: number; //当前sku所在的三级分类的id
    skuDefaultImg: string; //当前sku的默认的图片
    isSale: number; //当前sku是否上架
    createTime?: string; //当前sku的创建时间
    skuImageList: skuImageListType, //当前sku图片列表
    skuAttrValueList: skuAttrValueListType, //当前sku属性值列表
    skuSaleAttrValueList: skuSaleAttrValueListType //当前sku销售属性值列表
}

// 5- 根据skuId获取商品详情
export const reqGetDetailAsync = (skuId: number) => {
    return request.get<null, SkuItemDetailType>(`/admin/product/getSkuById/${skuId}`)
}

// 6- 根据spuId查询所有的spuId下面的sku列表
export const reqGetSkuListBySpuIdAsync = (spuId: number) => {
    return request.get<null, SkuItemType[]>(
        `/admin/product/findBySpuId/${spuId}`
    );
};

// 7- 新增sku
export const reqAddSku = (skuInfo: SkuItemDetailType) => {
    return request.post<null, null>(`/admin/product/saveSkuInfo`, skuInfo);
};
